package it.crosato.stage.server.model.phylogeny;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Vector;

public class PhylogeneticTreesBuilder {

	/**
	 * Costruisce l'albero filogenetico con l'algoritmo UPGMA e ne ritorna l'immagine
	 * @param dm la matrice di distanza tra gli organismi
	 * @param organisms la lista degli organismi
	 * @return l'immagine dell'albero filogenetico
	 */
	public static BufferedImage UPGMA(double[][] dm, Vector<String> organisms) {
		UPGMA upgma = new UPGMA(dm, organisms);
		TreeFrame frame = new TreeFrame(upgma.getRoot());
		BufferedImage awtImage = new BufferedImage(frame.getWidth(),frame.getHeight(),BufferedImage.TYPE_INT_RGB);
		Graphics g = awtImage.getGraphics();
		frame.printAll(g);
		frame.dispose();
		return awtImage;
	}

	/**
	 * Costruisce l'albero filogenetico con l'algoritmo Neighbour Joining e ne ritorna l'immagine
	 * @param dm la matrice di distanza tra gli organismi
	 * @param organisms la lista degli organismi
	 * @return l'immagine dell'albero filogenetico
	 */
	public static BufferedImage NJ(double[][] dm, Vector<String> organisms) {
		NJ nj = new NJ(dm, organisms);
		TreeFrame frame = new TreeFrame(nj.getRoot());
		BufferedImage awtImage = new BufferedImage(frame.getWidth(),frame.getHeight(),BufferedImage.TYPE_INT_RGB);
		Graphics g = awtImage.getGraphics();
		frame.printAll(g);
		frame.dispose();
		return awtImage;
	}
}